#pragma GCC optimize(2)
#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <bitset>
#include <unordered_set>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=5010,M=2*N;
int e[M],ne[M],h[N],idx;
int du[N];
int ans;
void add(int a,int b)
{
	e[idx]=b;
	ne[idx]=h[a];
	h[a]=idx++;
}
void dfs(int u,int fa)
{
	bitset<N> dp;
	dp[0]=1;
	du[u]++;
	int cnt=0;
	for(int i=h[u];~i;i=ne[i])
	{
		int j=e[i];
		if(j==fa) continue;
		dfs(j,u);
		du[u]+=du[j];
		dp=(dp|dp<<du[j]);
	}
	int res=0;
	for(int i=1;i<=du[u];i++)
	{
		if(dp[i]) res=max(res,i*(du[u]-1-i));
	}
//	cout<<u<<' '<<res<<endl;
	ans+=res;
}
int main()
{
	memset(h,-1,sizeof h);
	IOS;
	int n;
	cin>>n;
	for(int i=2;i<=n;i++)
	{
		int a;
		cin>>a;
		add(a,i);
		add(i,a);
	}
	dfs(1,-1);
	
	cout<<ans;

	return 0;
}

